LWIP学习笔记7

您所在的位置:网站首页 lwip socket支持 LWIP学习笔记7

LWIP学习笔记7

2024-06-15 22:22| 来源: 网络整理| 查看: 265

1 使用 Socket 接口编程

在 LwIP 中, Socket API 是基于 NETCONN API 之上来实现的,系统最多提供MEMP_NUM_NETCONN 个 netconn 连接结构,因此 Socket 套接字的个数也是那么多个,为了更好对 netconn 进行封装, LwIP 还定义了一个套接字结构体——lwip_sock(我称之为Socket 连接结构) , 每个 lwip_sock 内部都有一个 netconn 的指针, 实现了对 netconn 的再次封装。 LwIP 定义了一个 lwip_sock 类型的 sockets数组, 通过套接字就可以直接索引并且访问这个结构体了, 这也是为什么套接字是一个整数的原因。

1.1 Socket API

socket() bind() 用于服务器端绑定套接字与网卡信息 connect() 它用于客户端中,将 Socket 与远端 IP 地址、端口号进行绑定,在 TCP 客户端连接中,调用这个函数将发生握手过程(会发送一个 TCP 连接请求),并最终建立新的 TCP 连接,而对于 UDP 协议来说,调用这个函数只是在 UDP 控制块中记录远端IP 地址与端口号,而不发送任何数据。 listen() 只能在 TCP 服务器中使用,让服务器进入监听状态,等待远端的连接请求, LwIP 中可以接收多个客户端的连接。 accept() 用于 TCP 服务端中,等待着远端主机的连接请求,并且建立一个新的 TCP 连接,在调用这个函数之前需要通过调用 listen()函数让服务器进入监听状态。 accept()函数的调用会阻塞应用线程直至与远程主机建立 TCP 连接。 read()、 recv()、 recvfrom() sendto() send() end()函数可以用于 UDP 协议和 TCP 连接发送数据。在调用 send()函数之前,必须使用 connect()函数将远端主机的 IP 地址、端口号与 Socket 连接结构进行绑定。对于 UDP 会话, send()函数将调用 lwip_sendto()函数发送数据, 而对于 TCP 连接, 将调用netconn_write_partly()函数发送数据。 write() 这个函数一般用于处于稳定的 TCP 连接中传输数据,当然也能用于 UDP 协议中,它也是基于 lwip_send 上实现的,但是无需我们设置 flag 参数。 close() close()函数是用于关闭一个指定的套接字,在关闭套接字后,将无法使用对应的套接字描述符索引到连接结构,如果连接是 TCP 协议,将产生一个请求终止连接的报文发送到对端主机中,如果是 UDP 协议,将直接释放 UDP 控制块的内容。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3